package com.example.rdb.run;

import com.example.rdb.handle.etcd.EtcdMoveOne;
import com.example.rdb.handle.mysql.MysqlMoveOne;
import com.example.rdb.handle.redis.RedisMoveOne;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * @author XYC
 * @描述: TODO
 * @date 21.5.2817:32
 */
@Component
@Slf4j
public class DataMoveOne {

    @Autowired
    private MysqlMoveOne mysqlMoveOne;
    @Autowired
    private EtcdMoveOne etcdMoveOne;
    @Autowired
    private RedisMoveOne redisMoveOne;

    @PostConstruct
    public void run() throws Exception {
        //数据删除
//        clearData();
        //数据迁移
//        dataMoveByJson();//离线
        dataMove();//在线
        //生成json
//        createData();

    }


    /**
     * 离线迁移数据：etcd+redis+mysql
     * @throws Exception
     */

    public void dataMoveByJson() throws Exception {

//        new Thread(() -> {
//            try {
//                redisMoveOne.redisMoveByJson();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }).start();
//        new Thread(() -> {
//            try {
//                mysqlMoveOne.mysqlMoveByJson();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }).start();
//        new Thread(() -> {
//            try {
//                etcdMoveOne.etcdMoveByJson();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }).start();

//        redisMoveOne.redisMoveByJson();
        mysqlMoveOne.mysqlMoveByJson();
//        etcdMoveOne.etcdMoveByJson();

    }

    /**
     * 在线迁移数据：etcd+redis+mysql
     * @throws Exception
     */
    public void dataMove() throws Exception {

        new Thread(() -> {
            try {
                redisMoveOne.redisMove();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(() -> {
            try {
                mysqlMoveOne.mysqlMove();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(() -> {
            try {
                etcdMoveOne.etcdMove();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
//        mysqlMoveOne.mysqlMove();
//        redisMoveOne.redisMove();
//        etcdMoveOne.etcdMove();

    }

    /**
     * 清理数据：etcd+redis+mysql
     * @throws Exception
     */
    public void clearData() throws Exception {
        etcdMoveOne.delete();
        mysqlMoveOne.delete();
        redisMoveOne.delete();
    }


    /**
     * 生成json数据文件：etcd + redis
     * @throws Exception
     */
    public void createData() throws Exception {
//        new Thread(() -> {
//            try {
//                etcdMoveOne.createJson();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }).start();
//        new Thread(() -> {
//            try {
//                redisMoveOne.createJson();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }).start();
//        new Thread(() -> {
//            try {
//                mysqlMoveOne.createJson();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }).start();
        mysqlMoveOne.createJson();
        redisMoveOne.createJson();
        etcdMoveOne.createJson();
    }

}
